package common;

import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * La classe mette a disposizione dei metodi statici 
 * per estrarre dei campi da stringhe attraverso l'uso di regex 
 * 
 * 
 * @author Jacopo Ferrigno
 *
 */

public class ComandParser {


	/**
	 * Parsa la Stringa passata come primo parametro 
	 * e ritorna un array di stringhe contenente i singoli campi
	 * 
	 * @param comand Stringa da parsare
	 * @param regex Regex utilizzata per l'estrazione dei campi
	 * @param groups Gruppi, nella regex, che sono di interesse
	 * @return una rray di stringhe contenente i campi di interesse
	 */
	public static String[] parse(String comand, String regex, int [] groups){
		ArrayList <String> parametri=new ArrayList<String>(2000);
		Matcher matcher=Pattern.compile(regex).matcher(comand);
		
		
		while(matcher.find()){
			int gruppi=matcher.groupCount();
			for (int i=1; i<=gruppi;i++){
				if(matcher.group(i)!=null)
					parametri.add(matcher.group(i));
			
			}
			
		}
		
		return  parametri.toArray(new String[parametri.size()]);
		
		
	}
	
	
	/**
	 * Ritorna il primo gruppo in base alla regex passata
	 * 
	 * @param message e' la stringa da parsare
	 * @param regex e'la regex da utilizzare
	 */
	public static String getName(String message, String regex){
		
		Matcher matcher=Pattern.compile(regex).matcher(message);
		if(matcher.find())
			return matcher.group(1);
		
		return null;
	}
	/**
	 * Ritorna il primo gruppo in base alla regex statica regex="@(\\w{2,}),?\\w";
	 * 
	 * 
	 * @param message e' la stringa da parsare
	 * 
	 */
	
	public static String getName(String message){
		String regex="@(\\w{2,}),\\w";
		String comand =getName(message, regex);
		if(comand == null)
			comand = getName(message, "@(\\w{2,})");
		return comand;
	}
	
}
